package dao

import (
	"errors"
	"log"
	"net/rpc"
)

type ProxyStore struct {
	fileStore *FileStore
	client    *rpc.Client
}

func NewProxyStore(addr string) *ProxyStore {
	client, err := rpc.DialHTTP("tcp", addr)
	if err != nil {
		log.Println("Error constructing ProxyStore:", err)
	}
	return &ProxyStore{fileStore: NewFileStore(""), client: client}
}

func (s *ProxyStore) Get(key, url *string) error {
	//本地缓存有,直接返回
	if err := s.fileStore.Get(key, url); err == nil {
		return nil
	}
	//远程调用,尝试获取
	s.client.Call("Store.Get", key, url)

	if url == nil {
		return errors.New("url not found")
	}

	s.fileStore.Set(*key, *url)
	return nil
}

func (s *ProxyStore) Put(url, key *string) error {
	//交给master节点进行文件缓存
	if err := s.client.Call("Store.Put", url, key); err != nil {
		return err
	}
	//本地缓存
	s.fileStore.Set(*key, *url)
	return nil
}
